﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Web;

namespace msBsc.SvRef
{
    public class PageQueryGet
    {

        /// <summary>
        /// 将查询字符串解析转换为名值集合.
        /// </summary>
        /// <param name="queryString"></param>
        /// <returns></returns>
        public static System.Collections.Specialized.NameValueCollection GetQueryString(string queryString)
        {
            return GetQueryString(queryString, null, true);
        }

        /// <summary>
        /// 将查询字符串解析转换为名值集合.
        /// </summary>
        /// <param name="queryString"></param>
        /// <param name="encoding"></param>
        /// <param name="isEncoded"></param>
        /// <returns></returns>
        public static System.Collections.Specialized.NameValueCollection GetQueryString(string queryString, Encoding encoding, bool isEncoded)
        {
            queryString = queryString.Replace("?", "");
            System.Collections.Specialized.NameValueCollection result = new System.Collections.Specialized.NameValueCollection(StringComparer.OrdinalIgnoreCase);
            if (!string.IsNullOrEmpty(queryString))
            {
                int count = queryString.Length;
                for (int i = 0; i < count; i++)
                {
                    int startIndex = i;
                    int index = -1;
                    while (i < count)
                    {
                        char item = queryString[i];
                        if (item == '=')
                        {
                            if (index < 0)
                            {
                                index = i;
                            }
                        }
                        else if (item == '&')
                        {
                            break;
                        }
                        i++;
                    }
                    string key = null;
                    string value = null;
                    if (index >= 0)
                    {
                        key = queryString.Substring(startIndex, index - startIndex);
                        value = queryString.Substring(index + 1, (i - index) - 1);
                    }
                    else
                    {
                        key = queryString.Substring(startIndex, i - startIndex);
                    }
                    if (isEncoded)
                    {
                        result[MyUrlDeCode(key, encoding)] = MyUrlDeCode(value, encoding);
                    }
                    else
                    {
                        result[key] = value;
                    }
                    if ((i == (count - 1)) && (queryString[i] == '&'))
                    {
                        result[key] = string.Empty;
                    }
                }
            }
            return result;
        }

        /// <summary>
        /// 解码URL.
        /// </summary>
        /// <param name="encoding">null为自动选择编码</param>
        /// <param name="str"></param>
        /// <returns></returns>
        public static string MyUrlDeCode(string str, Encoding encoding)
        {
            if (encoding == null)
            {
                Encoding utf8 = Encoding.UTF8;
                //首先用utf-8进行解码                     
                string code = HttpUtility.UrlDecode(str.ToUpper(), utf8);
                //将已经解码的字符再次进行编码.
                string encode = HttpUtility.UrlEncode(code, utf8).ToUpper();
                if (str == encode)
                    encoding = Encoding.UTF8;
                else
                    encoding = Encoding.GetEncoding("gb2312");
            }
            return HttpUtility.UrlDecode(str, encoding);
        }


    }

    //public class PageWidth
    //{
    //    /// <summary>
    //    /// 1004px
    //    /// </summary>
    //    public static string _PageWidthString = "1004px";
    //    public static string PageWidthString
    //    {
    //        get
    //        {
    //            if (HttpContext.Current.Session != null && HttpContext.Current.Session["cach:page_width"] != null)
    //            {
    //                return (string)HttpContext.Current.Session["cach:page_width"];
    //            }
    //            else
    //            {
    //                return _PageWidthString;
    //            }
    //        }
    //        set
    //        {
    //            if (HttpContext.Current.Session != null && HttpContext.Current.Session["cach:page_width"] != null)
    //            {
    //                HttpContext.Current.Session["cach:page_width"] = value;
    //            }
    //            else
    //            {
    //                _PageWidthString = value;
    //            }
    //        }
    //    }
    //    /// <summary>
    //    /// 1004px
    //    /// </summary>
    //    public static string _PageHeightString = "";
    //    public static string PageHeightString
    //    {
    //        get
    //        {
    //            if (HttpContext.Current.Session != null && HttpContext.Current.Session["cach:page_height"] != null)
    //            {
    //                return (string)HttpContext.Current.Session["cach:page_height"];
    //            }
    //            else
    //            {
    //                return _PageHeightString;
    //            }
    //        }
    //        set
    //        {
    //            if (HttpContext.Current.Session != null && HttpContext.Current.Session["cach:page_height"] != null)
    //            {
    //                HttpContext.Current.Session["cach:page_height"] = value;
    //            }
    //            else
    //            {
    //                _PageHeightString = value;
    //            }
    //        }
    //    }

    //    public struct sWidth
    //    {
    //        public int intWidth;
    //        public string strWidth;
    //    }
    //    public static sWidth pWidth
    //    {
    //        get
    //        {
    //            sWidth sWidthtem;
    //            sWidthtem.strWidth = PageWidthString;
    //            sWidthtem.intWidth = int.Parse(PageWidthString.Replace("px", ""));
    //            return sWidthtem;
    //        }
    //    }

    //    public struct sHeight
    //    {
    //        public int intHeight;
    //        public string strHeight;
    //    }
    //    public static sHeight pHeight
    //    {
    //        get
    //        {
    //            sHeight sWidthtem;
    //            sWidthtem.strHeight = PageHeightString;
    //            sWidthtem.intHeight = int.Parse(PageHeightString.Replace("px", ""));
    //            return sWidthtem;
    //        }
    //    }

    //    public static sWidth pLeftWidth
    //    {
    //        get
    //        {
    //            sWidth sWidthtem;
    //            sWidthtem.intWidth = (int)(pWidth.intWidth / 3.8);
    //            sWidthtem.strWidth = sWidthtem.intWidth.ToString() + "px";
    //            return sWidthtem;
    //        }
    //    }

    //    public static sWidth pRightWidth
    //    {
    //        get
    //        {
    //            sWidth sWidthtem;
    //            sWidthtem.intWidth = (int)(pWidth.intWidth / 4.2);
    //            sWidthtem.strWidth = sWidthtem.intWidth.ToString() + "px";
    //            return sWidthtem;
    //        }
    //    }

    //    public static sWidth pCenterWidth
    //    {
    //        get
    //        {
    //            sWidth sWidthtem;
    //            sWidthtem.intWidth = pWidth.intWidth - pLeftWidth.intWidth - pRightWidth.intWidth - 16;
    //            sWidthtem.strWidth = sWidthtem.intWidth.ToString() + "px";
    //            return sWidthtem;
    //        }
    //    }

    //    public static sWidth pCenterRightOneWidth
    //    {
    //        get
    //        {
    //            sWidth sWidthtem;
    //            sWidthtem.intWidth = (pWidth.intWidth - pLeftWidth.intWidth - 8) / 2 - 4;
    //            sWidthtem.strWidth = sWidthtem.intWidth.ToString() + "px";
    //            return sWidthtem;
    //        }
    //    }

    //    public static sWidth pCenterRightTwoWidth
    //    {
    //        get
    //        {
    //            sWidth sWidthtem;
    //            sWidthtem.intWidth = pWidth.intWidth - pLeftWidth.intWidth - 12;
    //            sWidthtem.strWidth = sWidthtem.intWidth.ToString() + "px";
    //            return sWidthtem;
    //        }
    //    }

    //    public static sWidth pCenterLeftOneWidth
    //    {
    //        get
    //        {
    //            sWidth sWidthtem;
    //            sWidthtem.intWidth = (pWidth.intWidth - pRightWidth.intWidth - 8) / 2 - 4;
    //            sWidthtem.strWidth = sWidthtem.intWidth.ToString() + "px";
    //            return sWidthtem;
    //        }
    //    }

    //    public static sWidth pCenterLeftTwoWidth
    //    {
    //        get
    //        {
    //            sWidth sWidthtem;
    //            sWidthtem.intWidth = pWidth.intWidth - pRightWidth.intWidth - 12;
    //            sWidthtem.strWidth = sWidthtem.intWidth.ToString() + "px";
    //            return sWidthtem;
    //        }
    //    }

    //    public static sWidth GetsWidth(string strPosition)
    //    {
    //        sWidth sWidthtem = pLeftWidth;
    //        if (strPosition == "LEFT")
    //            sWidthtem = pLeftWidth;
    //        else if (strPosition == "RIGHT")
    //            sWidthtem = pRightWidth;
    //        else if (strPosition == "CENTER")
    //            sWidthtem = pCenterWidth;
    //        else if (strPosition == "RIGHT_CENTER")
    //            sWidthtem = pCenterRightTwoWidth;
    //        else if (strPosition == "LEFT_CENTER")
    //            sWidthtem = pCenterLeftTwoWidth;
    //        else if (strPosition == "LEFT_CENTER_RIGHT")
    //            sWidthtem = pWidth;
    //        else if (strPosition == "LEFT_CENTER_LEFT" || strPosition == "LEFT_CENTER_CENTER")
    //            sWidthtem = pCenterLeftOneWidth;
    //        else if (strPosition == "RIGHT_CENTER_RIGHT" || strPosition == "RIGHT_CENTER_CENTER")
    //            sWidthtem = pCenterRightOneWidth;
    //        return sWidthtem;
    //    }

    //    /// <value>
    //    ///     Property UrlBase is used to get the prefix for URLs.
    //    /// </value>
    //    public static string UrlBase
    //    {
    //        get
    //        {
    //            try
    //            {
    //                string path = HttpContext.Current.Request.ApplicationPath;
    //                if (!path.EndsWith("/")) path += "/";

    //                //if (yaf.Config.Root != null)
    //                //{
    //                //    // use specified root
    //                //    path = yaf.Config.Root;
    //                //    if (path[0] != '/') path = path.Insert(0, "/");

    //                //}

    //                if (!path.EndsWith("/")) path += "/";

    //                return path;
    //            }
    //            catch (Exception)
    //            {
    //                return "/";
    //            }
    //        }

    //    }
    //}



}
